package main

import (
	"fmt"
)

// 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。

// 有效字符串需满足：

// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 注意空字符串可被认为是有效字符串。
// 示例 1:

// 输入: "()"
// 输出: true
// 示例 2:

// 输入: "()[]{}"
// 输出: true
// 示例 3:

// 输入: "(]"
// 输出: false

func isValid(s string) bool {
	stack := []string{}
	for i := 0; i < len(s); i++ {
		char := string(s[i])
		// fmt.Println("char=", char)
		if len(stack) == 0 {
			stack = append(stack, char)
			// fmt.Println("stack0------------=", len(stack), stack)
			// fmt.Println("111")
		} else if check(stack[len(stack)-1], char) {
			stack = stack[0 : len(stack)-1]
			// fmt.Println("222")
			// fmt.Println("stack=", stack)
		} else {
			stack = append(stack, char)
			// fmt.Println("333")
		}
		// fmt.Println("stack=", stack)
	}
	return len(stack) == 0
}

func check(s1, s2 string) bool {
	if s1 == "{" && s2 == "}" || s1 == "(" && s2 == ")" || s1 == "[" && s2 == "]" {
		return true
	} else {
		return false
	}
}

func main() {
	fmt.Println(isValid("{([[]]"))
	fmt.Println(isValid("{}[]"))
	fmt.Println(isValid("{[)"))
	fmt.Println(isValid("{}[]()[[()]]"))
}
